/**********************************************************************
 *** *                                                            * ***
 *** *  Copyright (c) 2013 Harmonia Holdings Group LLC            * ***
 *** *                                                            * ***
 *** * Permission is hereby granted to use, modify, copy, and     * ***
 *** * distribute this software and its documentation for any     * ***
 *** * purpose only without profit, provided that the above       * ***
 *** * Copyright Notice appears in all copies and that both the   * ***
 *** * Copyright Notice and this Permission Notice appears in     * ***
 *** * every copy of supporting documentation.  No title to nor   * ***
 *** * ownership of the software is transferred hereby.  The name * ***
 *** * of Harmonia Holdings Group LLC shall not be used in        * ***
 *** * advertising or publicity related to the distribution of    * ***
 *** * the software without specific, written, prior permission.  * ***
 *** * This software is provided as-delivered without expressed   * ***
 *** * or implied warranty.  Harmonia Holdings Group LLC          * ***
 *** * makes no representation about the suitability of this      * ***
 *** * software for any purpose and accepts no responsibility for * ***
 *** * its use.                                                   * ***
 *** *                                                            * ***
 *** ************************************************************** ***
 *** *                                                            * ***
 *** * This program is free software; you can redistribute it     * ***
 *** * and/or modify it under the terms of the GNU General Public * ***
 *** * License as published by the Free Software Foundation;      * ***
 *** * either version 2 of the License, or (at your option) any   * ***
 *** * later version.                                             * ***
 *** *                                                            * ***
 *** * This program is distributed in the hope that it will be    * ***
 *** * useful, but WITHOUT ANY WARRANTY; without even the implied * ***
 *** * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR    * ***
 *** * PURPOSE.  See the GNU General Public License for more      * ***
 *** * details.                                                   * ***
 *** *                                                            * ***
 *** * You should have received a copy of the GNU General Public  * ***
 *** * License along with this program; if not, write to the Free * ***
 *** * Software Foundation, Inc., 51 Franklin Street, Fifth       * ***
 *** * Floor, Boston, MA 02110-1301, USA.                         * ***
 *** *                                                            * ***
 *** * For more information: http://www.gnu.org/licenses/gpl.html * ***
 *** *                                                            * ***
 **********************************************************************/
package org.etexascode.interrep.datamodel;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlTransient;

/**
 * The step data model.
 * @author ablatt
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlSeeAlso({DetectorEvent.class,SignalIndication.class,Vehicle.class,String.class})
public class StepData implements Serializable {
    /** Serial ID. */
    @XmlTransient
    private static final long serialVersionUID = -1285759446663941886L;


    /** List of detector events. */
    @XmlElement
    List<DetectorEvent> detectorEvents;

    /** List of signal indications. */
    @XmlElement
    List<SignalIndication> signalIndication;

    /** List of vehicles. */
    @XmlElement
    List<Vehicle> vehicles;
    
    /** List of simulator error messages. */
    @XmlElement
    List<String> errorMessages;


    /** Constructor. */
    public StepData() {
	detectorEvents = new ArrayList<DetectorEvent>();
	signalIndication = new ArrayList<SignalIndication>();
	vehicles = new ArrayList<Vehicle>();
	errorMessages = new ArrayList<String>();
    }

    /**
     * Adds a detector event.
     * @param de The detector event.
     */
    public void addDetectorEvent(DetectorEvent de) {
	detectorEvents.add(de);
    }

    /**
     * Adds a signal indication.
     * @param si The signal indication.
     */
    public void addSignalIndication(SignalIndication si) {
	signalIndication.add(si);
    }

    /**
     * Adds a vehicle to the list.
     * @param v The vehicle.
     */
    public void addVehicle(Vehicle v) {
	vehicles.add(v);
    }

    /**
     * Gets the list of detectors.
     * @return The list of detectors.
     */
    public List<DetectorEvent> getDetectorEvents() {
	return detectorEvents;
    }

    /**
     * Gets the list of signal indications.
     * @return The list of signal indications.
     */
    public List<SignalIndication> getSignalIndication() {
	return signalIndication;
    }

    /**
     * Gets the list of vehicles.
     * @return The list of vehicles.
     */
    public List<Vehicle> getVehicles() {
	return vehicles;
    }

	public void setVehicleList(List<Vehicle> vehicles) {
		this.vehicles = vehicles;
	}

	public void setSignalList(List<SignalIndication> signals) {
		this.signalIndication = signals;
	}
	
	public void addErrorMessage(String msg) {
		this.errorMessages.add(msg);
	}
	
	public List<String> getErrorMessages() {
		return errorMessages;
	}
}